home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ShareWare OnLine 2
/
ShareWare OnLine Volume 2 (CMS Software)(1993).iso
/
comm2
/
tcb_201.zip
/
TCB-201.DOC
< prev
next >
Wrap
Text File
|
1993-03-21
|
40KB
|
788 lines
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
TCB [Today's Callers Bulletin] v2.01
Robert Bingleman / February 21st, 1993
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
┌───────────────────────────────────────────────────────┐
│ USR 16.8 Dual Standard / ZyXel 16.8 │
│ Ridgeway _____.-----._____ Ontario │
│ ___----~~~~~~. ... ..... ... .~~~~~~----___ │
│ ================================================= │
│ ~~~-----......._____________.......-----~~~ │
│ (____) \ | / (____) │
│ || _/ | \_ || │
│ \\_______--~ //~~~\\ ~--_______// │
│ SysOp `~~~~---__ \\___// __---~~~~' FidoNet │
│ Shawn Mazzuto ~~-_______-~~ 1:247/301 │
│ │
│ Phone: (416)/894-2503 [Zyxel] or (416)/894-3012 [DS]. │
├───────────────────────────────────────────────────────┤
│ ∙ Online Games ∙ 1700+ Files ∙ FidoNet Echomail │
└───────────────────────────────────────────────────────┘
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
[TCB was written for Shawn Mazzuto, sysop of The Prime Directive.]
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
Introduction
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
I hadn't seen a "today's callers" program as configurable (or even remotely as
confusing) as this one, so I wrote one. This is it.
The best way to get TCB up and running is to simply set the necessary paths
(via command-line parameters or directly in the supplied TCB-201.CNF) and
create a bulletin. Take a look at the results, decide what you don't like,
and then look in this DOC file (or in the 132-column REF file, which you
might like to print out) to find out how you can go about changing it.
Alternate configuration examples are provided in the SAMPLES directory, as a
means of assisting sysops in deducing anything that's not properly explained
-- in other words, everything. These files do not represent the full extent
of TCB's options: they represent the extent of my imagination and patience,
the sum of which would be approximately nil at this point.
Generally speaking, the way you'll use TCB is to run it between callers,
so that it can create a fresh, up-to-date bulletin for the next caller to
look at (or not). This could be done by inserting it somewhere in the batch
file you use to run SuperBBS. Under a single-node system, this is VERY
simple.
A very rudimentary example:
[BBS Batch File] [TCB-201.CNF excerpt]
:LOOP MULTINODE = FALSE
TCB-201 LOGFILE = SYSTEM.LOG
BBS
GOTO LOOP
Under multi-node, it becomes a bit more whacked, because of file-sharing
problems that I've neither the inclination or information to resolve. If
you're not running a multi-node system, skip this bit, because it will just
confuse and frighten you.
Another rudimentary example:
[Node 1 batch] [Node 2 batch] [Node 3 batch]
:LOOP :LOOP ...
TCB-201 TCB-201
BBS BBS
COPY NODE01.LOG NODE01.TCB COPY NODE02.LOG NODE02.TCB
GOTO LOOP GOTO LOOP
[TCB-201.CNF excerpt]
MULTINODE = TRUE
LOGFILE = NODE01.TCB
LOGFILE = NODE02.TCB
...
The point here is that TCB never touches a logfile that might be open; it's
always working with benign copies. The filenames you use need not be the same
as in the above examples, of course; whatever suits you, so long as you use
the same general idea. If you don't, you'll find your 'tasker halted with a
share violation; follow this prescription and you'll be okay.
After you get this down, you've got to create a menu option (use "Display
ANS/ASC file") to allow users to display the bulletin(s). Relatively simple.
The worst thing about this program, apart from the incomprehensible config
file (read on), is the speed -- or lack thereof. Using multiple large log
files (say, around 2 or 3 100K+ logs), TCB can actually take several seconds
to create bulletins. As I've said previously, I want to do something about
this, but I don't have the development software to do it. I had a friend of
mine who owns Turbo C++ compile this version for me (the pain!), but it's not
really much better than MSC; I didn't expect that it would be. What's really
required here is some thoughtful re-coding of key routines in assembly, but,
unfortunately, I don't have an assembler (and I'm NOT going to fight with the
obnoxious inline assembler). Please let me know if the speed is a problem for
you, and I'll move this a bit higher up the priority queue.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
This DOC file...
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
...has become a bit more comprehensive since the first release. The bulk of
the reference material has been removed from the default config file and is
now contained in the easily printable 132 column TCB-201.REF file. I think
you'll find, though, that reading this document is your best hope if you've
not yet been introduced to TCB; this runs contrary to the first version, in
which the DOC file was a pseudo-humourous, ten minute knock-off. This file,
while still failing to contain any actual humour, does at least contain my
best attempt to date at explaining the available options.
Before we get into that, though, there's one topic we have to deal with...
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
The TCB Command Line...
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
Available parameters are /CNF=<name>, /LOG=<name>, /ANS=<name>, /ASC=<name>.
The /CNF= switch specifies a configuration file to use; the /LOG=, /ANS=,
and /ASC= parameters override, respectively, the LOGNAME, TCBANSI, and
TCBASCII path/filenames provided in the configuration file. If that's too
obscure for you, you might want to bail out right about now.
If no /CNF= switch is present, TCB looks for the file TCB-201.CNF in the same
directory as the executable file (NOT the current directory). I included this
as a "feature", and although I later realized that it's probably just going to
confuse and frighten prospective users, I left it in.
If your configuration file is saved as TCB-201.CNF in the proper diretory,
and you have the correct path/filenames set inside it, you obviously don't
need to specify ANY command line parameters. Good deal, don't you think?
If you have MULTINODE set to FALSE/NO, specifying a logfile via /LOG= will
override any LOGNAME definitions in the configuration file. Otherwise, the
name specified on the command line will be prepended (?!) to the list of
logfiles to process.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
Pointless
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
The configuration (that's physical, not logical) of TCB can be thought of
as being divided into three separate sections:
» Operating parameters (everything at the start of the CNF file)
» Names to leave out of the logfile (the $IGNORE string block)
» String definitions (the $LABEL, $LEVEL, $SPEED, and $EVENT string blocks)
» Customized fields (the $CUSTOM string block)
The operating parameters should be worried over the most (screw them up, and
you're up the proverbial creek of shit), changing the string definitions can
help to pretty things up a bit, and customized fields are just something to
amuse yourself with on a rainy (or, if you're really bad off, sunny) day.
Really, there are only a few specific things that you can't configure; one is
my name (a shame, I know), and the others... well, they escape me. I'm sure
you'll run into them soon enough.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
Creatively Cryptic Colour Codes...
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
Colour is a simple concept and, as such, is represented in an abstract and
confusing manner in the TCB configuration file. To further obfuscate the
subject (and I fully intend to), one colour isn't really a colour at all.
Any time you're required or wish to supply TCB with a colour, you'll do so
by specifying a colour "pair": two characters, the first of which represents
the background colour, and the second which, not surprisingly, represents
the foreground.
Background Values Foreground Values
-------------------------------------------------------------------------
0 Black 8 Black, flashing | 0 Black 8 Dark Grey
1 Red 9 Red, flashing | 1 Red 9 Light Red
2 Green A Green, flashing | 2 Green A Light Green
3 Brown B Brown, flashing | 3 Brown B Yellow
4 Blue C Blue, flashing | 4 Blue C Light Blue
5 Purple D Purple, flashing | 5 Purple D Light Purple
6 Cyan E Cyan, flashing | 6 Cyan E Light Cyan
7 Lt. Grey F Lt. Grey, flashing | 7 Light Grey F White
-------------------------------------------------------------------------
Say, for the sake of argument, that you wanted the border around the bulletin
to be flashing light purple on brown. Look in the first box; in this case,
brown is 'B', not '3', because we want the colour to flash. In the second
box, you'll see that light purple is 'D'. The code for flashing purple on
brown is 'BD'.
These colour codes are also valid in quote-enclosed string definitions, with
the exception of strings in the $IGNORE block; in such cases, they must be
preceded by an '@' character. The '@' character is used to indicate that a
special code is embedded in the string. There are only two other cases where
you'll use the '@': first, if you wish to have a quotation mark '"' in a quote-
enclosed string, you use @", so that the parser doesn't see that quotation
mark as meaning "end of definition", and second, if you want a real '@' symbol
to appear in your display string, you must use @@, for reasons that should be,
but probably aren't, quite obvious.
You might want to read that last sentence (all 6 lines of it) again.
Finally, the colour code '80' is a special case; the string parser in TCB
interprets this code as "don't write any ANSI codes at all." The reason
for this may or may not occur to you as you struggle with TCB; if not, don't
worry, because you're not missing anything particularly good. If anyone has
a particular use for the colour '80' (flashing black on a black background),
drop me a line and I'll arrange to have you brutally murdered.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
Some options you'd damn well better understand!
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
These options should appear at the beginning of the configuration file, before
any of the string definitions (see below -- but not right now). Although most
of these options are position-insensitive (that is, nobody, especially myself,
gives a hoot in hell what order they're in), a couple are a bit testy, and
you'll be doing yourself a favour if you just leave them in the order they're
shown here (and in the example configurations).
The format for these settings is, generally...
[LABEL] = <something>
... where [LABEL] is the name of the configuration option, and <something> is
either a string, a flag (YES/NO), a filename, or a numeric value, depending
on the option. Note that YES/NO settings can also be specified as TRUE/FALSE;
good news for those with a Boolean fixation.
Label Definition
-------------------------------------------------------------------------
SYSOPNAME A quote-enclosed string that's displayed at the top of the
bulletin, provided that the bulletin is wide enough.
For example, SYSOPNAME="Shawn Mazzuto".
There is no default for this option.
BBSNAME Same concept and use as SYSOPNAME.
Ex. BBSNAME="The Prime Directive".
Def. -- NO DEFAULT --
MULTINODE Should equal YES if you wish TCB to create your bulletin(s)
using multiple SuperBBS logfiles, such as might be necessary
on a system that has multiple nodes.
Ex. MULTINODE=YES
Def. MULTINODE=NO
LOGNAME The filename of a SuperBBS system log file. If MULTINODE is
set to YES, you can have multiple LOGNAME= statements; if not,
such an occurance will cause an error. The command line
option /LOG=<name> overrides this setting in a non-MULTINODE
configuration; otherwise, the logfile specified by /LOG=<name>
is used IN ADDITION TO the logfiles specified in the CNF file.
Ex. LOGNAME=H:\SBBS\SYSTEM.LOG
Def. SYSTEM.LOG, in the same directory as TCB-201.EXE.
TCBANSI The filename of the ANSI bulletin that TCB creates; if you
don't need an ANSI bulletin, use NONE for the name, and one
simply won't be created for you.
Ex. TCBANSI=H:\SBBS\TEXT\LASTCALL.ANS
Def. TCB.ANS, in the current directory.
TCBASCII The filename of the ASCII bulletin that TCB creates; same deal
as above with the NONE bit.
Ex. TCBASCII=H:\SBBS\TEXT\LASTCALL.ASC
Def. TCB.ASC, in the current directory.
BLANKLOG Should equal YES if you wish TCB to create a bulletin even if
no callers were found to be displayed; in such a case, the
bulletin(s) will simply say, "No Callers Found." Set to NO,
no bulletin(s) will be created in this circumstance.
Def. BLANKLOG=NO
CALLCOUNT The maximum number of previous callers to display; if you'd
like to display all callers in the specified logfile(s), use
the value 0.
Ex. CALLCOUNT=21
Def. CALLCOUNT=0 (display all callers)
CALLDATE Set to YES if only today's callers should be displayed; NO will
cause all callers in the logfile(s) to be displayed.
Def. CALLDATE=NO (display all callers)
SECURITY The maximum security level to display; any callers with security
levels up to and including this number will be displayed.
Ex. SECURITY=500
Def. SECURITY=32767
LOCAL Should equal YES if local log-ons should be displayed in the
bulletin; note that this does not override SECURITY.
Def. LOCAL=NO
HEIGHT The height of each 'page' of the bulletin, including header/
footer/totals; basically, this is the desired display size.
A value of 0 indicates that the bulletin(s) should not be
broken into pages.
Ex. HEIGHT=49
Def. HEIGHT=24
LABELS Set to YES if "labels" should appear above each column. The
actual configurable strings are defined later in the CNF file;
this flag simply dictates if they'll ever be seen.
Def. LABELS=NO
TOTALS Set to YES if numeric-value (counter) columns should be summed
in a "totals" row at the bottom of each page; non-numeric
fields are left blank. If set to NO, this line will not appear.
Def. TOTALS=NO
FANCY Set to YES if the ANSI bulletin file (provided that there is
one) should use cursor-positioning and line-deleting codes to
make the bulletin look nicer and reduce transmission time. If
set to NO, the screen is cleared between each page (<esc>2J).
Def. FANCY=YES
IGNOREQWK Set to YES if file-transfers with the extensions "QWK" or "REP"
should be ignored (ie. not counted or displayed).
Def. IGNOREQWK=NO
OUTSIDEC A two-digit colour code (see above, for a change) that defines
the colour of the outside border around the bulletin.
Def. OUTSIDEC=04 (black bg/dark blue fg)
INSIDEC Same as above, but pertaining to the inside frame characters.
Def. INSIDEC=04 (black bg/dark blue fg)
OUTSIDE Twelve (not ten, twelve) characters that are given to master-
craftspersons (izzat right?) to built a sturdy frame around your
bulletin(s). The string is quote-enclosed, and can include
colour-control strings ('@xx').
Def. OUTSIDE="╔═╤╗╚═╧╝║╟║╟║║╢║╢║"
INSIDE Three characters that are used by professional interior
decorators to design the "divisions" between columns inside the
bulletin. Quote-enclosed, can include colour codes, etc.
Def. INSIDE="─┼─┼│││"
HEADERC Colour code used for the two-line title bar. This new item
resolves a cosmetic problem with the first version of TCB.
Def. HEADERC=4E (blue bg/lt. cyan fg)
LABELC Colour code used for the labels above each column, if you've
got them enabled.
Def. LABELC=0F
FOOTERC Colour code for the "Press [ENTER]" (or whatever it was I said
in it) footer that appears at the bottom of each page.
Def. FOOTERC=4E (blue bg/lt. cyan fg)
LASTULC Colour code used for the "Last Transfer" Field Type; the colour
in the CONFIG line (below again) is used for downloads, while
this colour is used for uploads.
Def. Use same colour as downloads.
ZEROC Colour code assigned to counter fields with a value of 0. If
the background portion of this code (the first digit) is '8',
the background of zero-valued columns is left untouched while
the foreground changes to the specified colour.
Def. Use normal field colour from CONFIG line.
CONFIG Defines the order, type, size, justification, and colour of
the fields that appear in your bulletin(s). See the next
section for a thick and meaty description.
Def. -- NO DEFAULT --
RATING The letters A to M, corresponding to the thirteen "special
events" under Field Type U (uh, look down there again).
During some (uh, most) calls, more than one "special event"
will occur, and the RATING line is the means by which you
define the precedence of the various "special events". If
you're going to define this string, you MUST include all
characters from A to M. If you don't want certain "events"
to appear under ANY circumstances (such as the "Sysop Hung
up on User" special event), give them a lower precedence
than the "None" event ('A').
Def. BLAMCDJIHFGEK
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
Welcome to my CONFIG line.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
TCB is configured using the concept of "fields" (and Field Types), as in a
database program; these fields display the various parameters & statistics
related to each call in the logfile(s). Now, there can be a lot of
information in one call -- far too much to pack into one eighty-column line,
and inevitably more than any normal person should care about. Accordingly,
you can select exactly what information is inserted in your bulletins. If
you're still with me, that's good. Hang in there for just a while longer.
The fields that will be included in your ANSI/ASCII lists are specified by a
string of values assigned to the CONFIG variable. The format of the CONFIG
line is as follows:
CONFIG = [<Leading><|Trailing><Field Type><Width><Alignment><Colour>] [...] ...
<Leading> a numeric value, indicating the number of spaces to
insert before any information in the field. The default
value is 0 (no leading spaces).
<|Trailing> a numeric value, preceded by a "|" (pipe) character to
distinguish it from the <Leading> field, indicating the
number of spaces to leave blank at the end of the field.
The default is 0 (no trailing spaces).
<Field Type> one of the following letters, used to indicate the type
of information to be displayed in this column.
A Username
B Alias
C LogOn Time [24-hour]
D LogOn Time [12-hour + a/p]
E LogOff Time [24-hour]
F LogOff Time [12-hour + a/p]
G Date of Call [YY-MM-DD]
H Duration of Call
I User Level [Numeric]
J User Level [Text from $LEVEL block]
K Number of Downloads
L Number of Uploads
M Connect Speed [Numeric]
N Connect Speed [Text from $SPEED block]
O Sysop Page Attempts [Numeric]
P Sysop Page Attempt? ["Yes"/"No"]
Q Last File Downloaded
R Last File Uploaded
S Last File Downloaded OR Uploaded [Last Transfer]
T Number of Messages Written
U Special Events [Text from $EVENT block]
V Caller Number
W Node Number
a-z User-configurable [from $CUSTOM block]
<Width> is the number of characters to allot for the field. Any
excess characters will be truncated; any excess space will
be filled with either spaces or zeros (see ALIGNMENT).
<Alignment> is L/R/C/Z = Left/Right/Center/padZero. If the text to be
inserted in the field is LARGER than the WIDTH, this is
used to determine which side of the text to print from.
In other words, if the field was four characters wide, but
the string was, say, eight (for example, "SKINHEAD"), using
'L' as your alignment would give you 'SKIN'. Using 'R'
would give you 'HEAD'. In this case, C and Z are inter-
preted the same as L.
<Colour> is the colour code for the field. With Field Types J, N,
U, and Custom Field Types a-z, you might want to use the
colour code '80' (remember?). This code tells TCB not to
write any prefix ANSI codes at all; useful in avoiding
extraneous codes in cases where text strings contain their
own colour codes.
For example, 2|1A25C1F produces a field that has 2 leading spaces ('2'), one
trailing space ('|1'), contains the user's name ('A') in a field 25 characters
wide ('25'). The name is centered ('C') and the field is coloured white on
red ('1F'). It's hard to believe, I know.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
CONFIG Field Types that require Thoughtful Discussion...
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
Only one comes to mind, apart from the custom field types (they're discussed
below), and that's the Type-U [Special Event] field.
This one exists because there are quite a few (twelve that I've found) events
that can occur during a call that don't really deserve their own field. For
example, although it would be nice to see if a user dropped carrier, or a
fatal system error occurred while a user was on-line, there's no point in
wasting precious space on fields dedicated to either of these possibilities.
(To be honest, there's no point in dedicating any drive space to this program
at all, but then we've already covered that, haven't we?) Therefore, the
"Special Event" Field Type can be thought of as being a grouping of some of
the more esoteric event possibilities under one heading.
Actually, there is one "event" that's included here and also has its own
Field Type (two of its own, even): sysop page. I did this simply so that
those who use this "special event" field need not waste space by having a
Type-O or Type-P "Page?" field as well, although you'll probably want to.
Here are the events. Make sure you don't confuse the lettering of these
events with the lettering of the Field Types; these letters are used only
in the RATING= configuration item, and in the $EVENT display-string block
to identify which string belongs to which event.
ID Letter Definition
-----------------------------------------------------------------------
A No special event occurred.
B User paged the sysop.
C Used entered invalid password.
D Name not in userfile.
E Password failure (access denied).
F New user questionnaire completed.
G User dropped carrier.
H Calls-per-day limit exceeded.
I User inactivity logoff.
J User's allotted time expired.
K Fatal system error.
L Sysop hung up on user [Alt-H].
M User entered invalid name, then re-entered correct name.
Unlike the Field Types, the A -> M identifiers here are not case sensitive,
and can be used in lower-case with equal success.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
Block of Ignorance
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
New to this version is the capability to specify a bunch of users (up to 256)
to exclude from the bulletin(s). This is done quite simply:
$IGNORE
"Robert Bingleman"
"Price Waterhouse"
"Your name here"
The '$IGNORE' label tells TCB that the next batch of strings should be
compared to names found in the logfile and, if found, these entries should
be skipped entirely. The names must be quote-enclosed, as in the example.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
String Definitions
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
All quote-enclosed strings can be of any reasonable length and can contain
colour codes (except the $IGNORE block, above) in a format that I won't bother
mentioning again.
There are limits (such as the number of strings defined, total space allotted
for all strings of a certain block, and so on), but you probably won't run
into them. If you do, you'll know it -- believe me.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
String Definitions, part I: The $LABEL Block.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
These are the strings that show up just under the header, if you have LABELS
set to YES or TRUE. If you don't put any colours in the strings, they
default to being the same colour as the data fields they correspond to, which
will probably be frighteningly ugly. Also, one of these labels (you'll have
to guess which) is displayed in the "Name" field, assuming you have one, in
the Totals line, also assuming you have one. It should probably say something
along the line of "Totals...", but, if you think that the purpose of the
Totals line is already too obvious, you could use "Sausages...", or some other
reference that will utterly fail to get a laugh.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
String Definitions, part II: The $SPEED Block.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
By defining strings in this section and using a Type-N field, you could show
that a caller's speed was "Zippy", "Annoying", "Putrid", "Hellish", or
"Drippy" (or whatever the hell you want) instead of the old, informative,
boring numeric values that we all know. Remember, the strings can be any
reasonable length, so you could theoretically define 1200-bps callers as
being "Too Effing Cheap To Buy a Decent Modem."
I really don't know why I did this; if you thought everything up to this
point was stupid and useless, you must be absolutely speechless right now.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
String Definitions, part III: The $LEVEL Block.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
Okay, this is a bit more useful. When you use a Type-J field, instead of
displaying the users' levels as numbers, you can define strings here to show
that the user has "$Paid$", is a "Freeloader" or happens to be the "Sysop"
(who usually qualifies for both of the former... ha, ha).
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
String Definitions, part IV: The $EVENT Block.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
Strings defined in this block to correspond to Field Type U, as discussed
above. The events and their corresponding alphabetic labels are enumerated
(as much as alphabetic labels can be enumerated) above, as well as in the
TCB-201.REF file, and, more briefly, in #comment lines in the supplied
TCB-201.CNF configuration file.
If you knew how much I enjoyed doing that, you'd forgive me for it.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
User-Defined Field Types (a - z) : The $CUSTOM Block.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
Here's where you can kludge together your own Field Types for whatever devious
purposes you might have in mind.
TCB is a simple parser (actually two of them, but don't let it bother you)
that scans for certain "key" strings in the log file(s), and acts upon what it
finds. What you're doing in this section is supplying TCB with your own "key
strings", along with the display strings that will appear in the corresponding
Field Type depending on whether or not the key string is found. If you don't
define the "Yes" and "No" display strings, the field will become a counter,
just like the built-in counters for messages, xfers, etc. In such a case, if
you have a Totals line, this field will also be summed at the end of each
"page" of the bulletin, whether you like it or not.
Note that defining no $CUSTOM block will speed up TCB a little bit; I won't
bother explaining why, but it's good to know in any case.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
Other Thoughts...
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
» Be careful with your choice of text editors; if it's a stupid one that
changes all spaces (even within quotes) to tabs when it can, you're going
to have a long, strange trip.
» If you're having problems with memory, reduce TCB's file buffer allocation
by specifying '_BUFFER = xxxx' in the configuration file, where xxxx is
a number less than 5120 (the default value).
» Conversely, if you have tons of memory free, you might be able to speed
TCB up a bit by increasing this same value beyond 5120.
» The output file names can be any valid DOS device, including CON and PRN
(or LPTx). If you had a need, you could make up a config file that had
a very decent width (ie. many fields) and send the ASCII version directly
to a printer that you've put in "compressed" mode. The ASCII file has a
Ctrl-L (form feed, also used for clearing the screen) at the beginning of
each "screen", so you could also set the height of the list to the height
of your printer's page [66 lines is normal for dot-matrix].
» One reason you'd want to change the characters used to form the "frame"
around and within the bulletin, apart from cosmetic, is so that you could
create pure ASCII lists (ie. using no extended characters) for non-PC
callers.
» You could create a config file that shows who's been playing online games.
Use the name of the EXE/COM/BAT files as your "key strings" in as many
Custom Fields as you have games, and have as the CONFIG string only the
user's name (or alias, or whatever) and the Custom Fields that you've
just defined. For example:
(Custom Field definition, in $CUSTOM block):
a = "TW2002.BAT" "@0FYes" "@07No"
b = "LEMONADE.BAT" "@0FYes" "@07No"
(CONFIG string definition, in main block):
CONFIG = 1A20L0F a3R80 b3R80 [...]
» Another use for the Custom Fields is obvious enough: there's a SuperBBS
menu option that allows you to write a string directly into the log file.
Using this idea, you could have pretty much anything show up in your
bulletin; for example, you could have a menu option, visible to all of
your users, that was displayed in your menu as something along the lines
of "Format Hard Disk C:". Well, if you have that menu option write a
certain string to the logfile, you could check for it using a Custom Field,
and you'll soon find out which of your users have it in for you. If you
make such a menu option and actually have it result in the formatting
of a hard drive, well, you're too stupid to have any friends anyway.
» If you only want a "Y" or "N" for your chat field (presuming you have one),
simply set the width of the field to 1 and use 'L' alignment. This way,
only the first character of the hard-coded "Yes" and "No" strings will
appear, giving you "Y" or "N". Damn, am I clever or what?
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
Planned upgrades...
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
Hmm. Well, as I've said, I don't really want to waste more time on this
program than is absolutely necessary, but I'm open to suggestions. There
are three things that I can forsee that would cause me to go back to work:
1. Someone writes to say that they still can't extract the information from
the logfiles that they want to. This will likely cause me to implement
the $TEMPLATE section that I was contemplating including in this version.
2. The SuperBBS guys get off their butts and include AVATAR support, at which
time I'll gladly add an AVATAR-compatible bulletin module.
3. I get my hands on a decent assembler, and, as I've said, I'll do a re-write
of some key routines and speed it up considerably.
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
Registration?
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
<A serious bit of spleen-venting.>
It's completely free. Anyone who wants money for simple utilities should be
fed olive loaf until they puke. Seriously, if you need money, get a job, as
I had to do. Downloading lame 200K+ Windows utilities written in Visual Basic
is annoying and costly enough; asking $30+ for them (and creating "shareware
reminder" screens that are about six thousand times more complex than the
actual program) is beyond my comprehension. Of course, these bloated gadgets
receive glowing praise in garbage magazines like Compute; not too surprising,
really, considering:
1. A commercial program with a price of $200 is considered "extremely
affordable" by these toe-sucking hermaphrodites. I hardly think that
the spud-buffing reviewers who receive free copies of these programs
are qualified to make any judgements concerning "affordability".
2. The aforementioned huge-Windows-utility-writing slugs would give their
left nuts to have their cheesy-hunk-of-walrus-snot programs mentioned
in a kool rag such as Compute, so I'd be very surprised if any of the
so-called reviewers ever actually PAY for the shareware they "review".
3. A fairly recent article has nearly every contributing editor proudly
proclaiming that he uses BASIC exclusively; one slobbering moron
confides that he's switched from GW-Basic to QuickBasic because "[he]
wants to write shareware", and therefore "[needs] a compiled language."
I have several years' painful experience with C and assembly on various
systems, and I couldn't get a job painting Bill Gates's house; this wad
of organic navel-lint not only makes good money writing idiotic articles
for a popular magazine, but also asks for (and undoubtedly receives) big
bucks from computer novices who think this dork is a huge celebrity and
get warm and moist over the idea that he's actually going to read something
of theirs (even if it's only their signature on a personal check).
Of course, I'm a bit confused about one thing; most of these knuckle-walkers
would have a hard time running Windows 1.0 on their CGA-equipped Osborne
portables, even with the wobbly 16K Sinclair memory expansion and six eight-
inch 180-K floppies they've added (using hot tips from the latest issue of
Creative Computing, no doubt).
Whew.
<-30->
If you've got something to say to me, you might drop me a line (via netmail
@ 1:247/301 or on Compu$erve as the ever-popular 73707,533). Judging by the
volume of mail I've received in the past four months, I'd get more letters if
I left a message in the International Teen conference and told the pizza-faced
adolescents that I'm forty-six, ride a fiery orange moped, smell like a bowl
of rotten bean-dip, and have my nose- and ear-hair waxed and braided through
the blistered gluteals of a screaming gibbon.
So, for the sake of my own amusement, I'm welcoming any abuse that you'd like
to send my way. If you're having a rotten life, drop me a line and tell me
that you think I'm an arrogant bastard and that I should go and get stuffed as
soon and as freqently as possible. Feel free to express yourself using the
means of communication you know best.
10 LET A$="COMPUTE"
20 LET B$="IS A RAD MAGAZINE BRO DUDEZ!!!!!!!"
30 PRINT A$;" ";B$;" ";
40 GOTO 10
50 STOP
Ciào ciào, bambinos.
-- Robert Bingleman, February 21st, 1993.
* Note: